package org.ne.banksys.service.serviceImpl;

import com.github.pagehelper.Page;
import org.ne.banksys.entity.Card;
import org.ne.banksys.mapper.CardMapper;
import org.ne.banksys.service.CardService;
import org.ne.banksys.utils.MD5Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author wey
 * @date 2025/6/13 下午10:43 06
 **/


@Service
public class CardServiceImpl implements CardService {
    @Autowired
    private CardMapper cardMapper;


    @Override
    public List<Card> getAll() {
       return cardMapper.selectAll();
    }

    @Override
    public Card selectCardById(String id) {
        return cardMapper.selectById(id);
    }

    @Override
    public void updateAmount(String cardId, BigDecimal amount) {
        cardMapper.updateById(cardId, amount);
    }

    @Override
    public void insert(Card card) {
        cardMapper.add(card);
    }

    @Override
    public void reportLoss(String cardId) {
        cardMapper.reportLoss(cardId);
    }

    @Override
    public void reportReturn(String cardId) {
        cardMapper.repostReturn(cardId);
    }

    @Override
    public void deleteCard(String cardId) {
        cardMapper.deleteById(cardId);
    }

    @Override
    public void updatePwd(String cardId, String password) {
        cardMapper.updatePass(cardId, password);
    }

    @Override
    public void update(Card card) {
        cardMapper.update(card);
    }

    @Override
    public Card registerCard(Long customerId) {
        return cardMapper.registerCard(customerId);
    }

    @Override
    public List<Card> selectCardByCustomerId(Long customerId) {
        return cardMapper.selectByCustomerId(customerId);
    }

    @Override
    public Page<Card> getAllCards(Integer page, Integer size) {
        if (page == 1) {
            page = 0;
        }
        return cardMapper.getPage(page, size);
    }














    /**
     * 根据开户日期范围筛选银行卡

     * @param startDate 起始日期（可为null表示无下限）
     * @param endDate   结束日期（可为null表示无上限）
     * @return 符合时间范围的银行卡列表
     */
    @Override
    public List<Card> filterByOpenDateRange(

            Timestamp startDate,
            Timestamp endDate
    ) {
        return cardMapper.findByOpenDateRange(startDate, endDate);
    }



    /**
     * 根据开户金额范围筛选银行卡

     * @param minMoney 最小金额（可为null表示无下限）
     * @param maxMoney 最大金额（可为null表示无上限）
     * @return 符合金额范围的银行卡列表
     */
    @Override
    public List<Card> filterByOpenMoneyRange(
            BigDecimal minMoney,
            BigDecimal maxMoney
    ) {
        return cardMapper.findByOpenMoneyRange(minMoney, maxMoney);
    }

    /**
     * 多条件组合查询
     * @param startDate 开户开始日期
     * @param endDate   开户结束日期
     * @param minMoney  最小开户金额
     * @param maxMoney  最大开户金额
     * @return 同时满足条件的银行卡
     */
    @Override
    public List<Card> filterCards(
            Timestamp startDate,
            Timestamp endDate,
            BigDecimal minMoney,
            BigDecimal maxMoney
    ) {
        return cardMapper.findByConditions(startDate, endDate, minMoney, maxMoney);
    }

}
